/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package semac.control;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import semac.entidades.*;

/**
 *
 * @author Trinity
 */
public class CtrlReportes {
    private HttpServletRequest request;
    private Conexion connection;

    public CtrlReportes() throws IOException, ParserConfigurationException, SAXException {
        request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String urlFile =  request.getRealPath("/")+ "/WEB-INF/dataBase.xml";
        connection =  new Conexion(urlFile);
    }

//Metodo que permite la generacion del Reporte de los Matriculados
    public ArrayList<Matricula> generarReporteMatriculados(GregorianCalendar fechaInicial, GregorianCalendar fechaFinal) {
        CtrlMatriculas matriculas = new CtrlMatriculas();       //controlador de matriculas para obtener las matriculas activas
        ArrayList<Matricula> matriculasActivas;                 //lista en donde se guardan las matriculas activas
        ArrayList<Matricula> matriculados = new ArrayList();    //lista en donde se guardarán las matriculas del reporte
        matriculasActivas = matriculas.getMatriculasActivas();  //obtiene matriculas activas en un año lectivo

        //ver por cada matricula activa cuales se realizaron dentro de las fechas de parámetros
        for (int i = 0; i < matriculasActivas.size(); i++) {
            if (matriculasActivas.get(i).getFechaMatricula().compareTo(fechaInicial) > 0 &&
                    matriculasActivas.get(i).getFechaMatricula().compareTo(fechaFinal) < 0) {
                matriculados.add(matriculasActivas.get(i));     //agregar al listado de matriculados
            }
        }
        return matriculados;
    //:List<Alumno>
    }

//Metodo que permite la generacion del Reporte de las moras de todos los alumnos con mora
    public ArrayList<Alumno> generarReporteMoraGeneral(GregorianCalendar fechaActual) throws IOException, ParserConfigurationException, SAXException, ClassNotFoundException, SQLException {
        CtrlCobros cobros = new CtrlCobros();           //Controlador por medio del que se obtienen los cobros retrasados
        CtrlAlumnos alumnos = new CtrlAlumnos();        //Controlador por medio del que se obtienen los alumnos con pagos pendientes
        CtrlMatriculas matricula = new CtrlMatriculas();//Controlador para verificar que el alumno esté matriculado
        ArrayList<Cobro> cobrosRetrasados;              //Listado que guarda el listado de cobros retrasados
        ArrayList<Alumno> deudores = new ArrayList();   //Listado que guarda el listado de alumnos deudores
        Alumno alumno;

        cobrosRetrasados = cobros.getCobrosRetrasados(fechaActual);

        //Por cada cobro retrasado agregar el alumno deudor que esta matriculado a la lista de deudores
        for (int i = 0; i < cobrosRetrasados.size(); i++) {
            alumno = alumnos.getAlumnoByCodigo(cobrosRetrasados.get(i).getCodigoAlumno());
            if (alumno.getCodigoEstadoMatricula() == matricula.getCodigoEstadoMatricula("Matriculado")) {
                deudores.add(alumno);
            }
        }
        return deudores;
    //:List<Alumno>
    }

    //Metodo que permite la generacion del Reporte de las moras de todos los alumnos con mora
    public ArrayList<Alumno> generarReporteMoraPorCurso(Curso curso, int anio, GregorianCalendar fechaActual) throws IOException, ParserConfigurationException, SAXException, ClassNotFoundException, SQLException {
        CtrlAnioLectivosCursos cursoAnio = new CtrlAnioLectivosCursos();
        CtrlMatriculas matricula = new CtrlMatriculas();
        CtrlAlumnos alumnos = new CtrlAlumnos();
        CtrlCobros cobros = new CtrlCobros();
        ArrayList<Integer> alumnosCurso;                    //Listado de alumnos que pertenecen a un curso
        ArrayList<Alumno> deudores = new ArrayList<Alumno>();//Listado de alumnos deudores
        ArrayList<Cobro> cobrosRetrasados;
        AnioLectivoCurso cursoActual;


        cursoActual = cursoAnio.getAnioLectivoCurso(curso, anio);//obtiene el curso deseado del año actual
    //    alumnosCurso = matricula.getCodigoAlumnosPorCurso(cursoActual);//obtiene los alumnos del curso especificado
        cobrosRetrasados = cobros.getCobrosRetrasados(fechaActual);//obtiene los cobros retrasados

        //por cada cobro retrasado verifica si el estudiante se encuentra en el curso especificado
        for (int i = 0; i < cobrosRetrasados.size(); i++) {
        //    int codigoAlumno = alumnosCurso.indexOf(cobrosRetrasados.get(i).getCodigoAlumno());
        //    if (codigoAlumno != -1) {
        //        deudores.add(alumnos.getAlumnoByCodigo(codigoAlumno));
        //    }
        }

        return deudores;
    //:List<Alumno>
    }
}
